perm filename ERRATA.TEX[TEX,DEK]20 blob
sn#742954 filedate 1984-02-18 generic text, type T, neo UTF8
% Bugs (sigh) in The TeXbook
\input manmac
\proofmodefalse
\raggedbottom
\output{\onepageout{\unvbox255\kern-\dimen@ \vfil}}
\def\rhead{Bugs in {\sl The \TeX book}}
\def\bugonpage#1(#2) \par{\bigbreak\tenpoint
\hrule\line{\lower3.5pt\vbox to13pt{}Page #1\hfil(#2)}\hrule\nobreak\medskip}
\bugonpage 170, table in middle of the page (2/12/84)
\ninepoint
$$\baselineskip0pt\lineskip0pt
\halign to\hsize
{\strut\hbox to\parindent{\it#\hfil}& % for the legend "Left atom"
#\hfil\quad& % for the row labels
#\hfil\tabskip 0pt plus 10pt& % for the rule at the left
\hbox to 25pt{\tt\hss#\hss}& % for column 1
\hbox to 25pt{\tt\hss#\hss}& % for column 2
\hbox to 25pt{\tt\hss#\hss}& % for column 3
\hbox to 25pt{\tt\hss#\hss}& % for column 4
\hbox to 25pt{\tt\hss#\hss}& % for column 5
\hbox to 25pt{\tt\hss#\hss}& % for column 6
\hbox to 25pt{\tt\hss#\hss}& % for column 7
\hbox to 25pt{\tt\hss#\hss}& % for column 8
#\hfil\tabskip0pt\cr % for the rule at the right
\noalign{\vskip-6pt} % it just happens that there's extra white space
&&&&\multispan7\hss\it Right atom\hss\cr
\noalign{\vskip3pt}
&&&\rm Ord&\rm Op&\rm Bin&\rm Rel&\rm Open&\rm Close&\rm Punct&\rm Inner\cr
\noalign{\vskip2pt}
\omit&&\multispan{10}\leaders\hrule\hfil\cr
\omit\vbox to 2pt{}&&\vrule&&&&&&&&&\vrule\cr
&Ord&\vrule&0&1&(2)&(3)&0&0&0&(1)&\vrule\cr
&Op&\vrule&1&1&*&(3)&0&0&0&(1)&\vrule\cr
&Bin&\vrule&(2)&(2)&*&*&(2)&*&*&(2)&\vrule\cr
Left&Rel&\vrule&(3)&(3)&*&0&(3)&0&0&(3)&\vrule\cr
atom&Open&\vrule&0&0&*&0&0&0&0&0&\vrule\cr
&Close&\vrule&0&1&(2)&(3)&0&0&0&(1)&\vrule\cr
&Punct&\vrule&(1)&(1)&*&(1)&(1)&(1)&(1)&(1)&\vrule\cr
&Inner&\vrule&(1)&1&(2)&(3)&(1)&0&(1)&(1)&\vrule\cr
\omit\vbox to 2pt{}&&\vrule&&&&&&&&&\vrule\cr
\omit&&\multispan{10}\leaders\hrule\hfil\cr}$$
\bugonpage 173, line 11 (1/2/84)
\indent|Clearly $a_i<b_i$ for~$i=1, 2, \ldots, n$.|
\bugonpage 189, line 18 (2/13/84)
\ninepoint\noindent
{\parfillskip=0pt
when there is an overlap.] \ If $e=0$ and if there is an |\leqno|,
the equation number is\par}
\bugonpage 204, line 31 (2/13/84)
\ninepoint\noindent
of\/ |\a| is delimited by a left brace.
\bugonpage 219, simplification of line 18 (2/15/84)
\ninepoint\indent
| \advance\count0 by\count2 \hexdigit}}|
\bugonpage 242, line 29 (1/2/84)
\ninepoint\noindent
{\parfillskip=0pt
a relation, the solution is to insert `|{}|' ↑↑{lbrace rbrace}
at the beginning of the right-hand formula; \TeX
\par}
\bugonpage 245, line 24 (2/15/84)
\ninepoint\noindent
of a box that spans columns $i$ through~$j$,
hence the glue in such a box might shrink.
\bugonpage 248, the fourth dangerous bend (2/15/84)
{\parfillskip=0pt
\ddanger You have to be careful with the use of |&| and ↑|\span| and ↑|\cr|,
because these tokens are intercepted by \TeX's scanner even when it is
not expanding macros.\par}
\bugonpage 249, lines 20--26 (2/15/84)
\ninepoint\noindent
line (see Chapter~9).
If you don't want a~|\cr| at the end of a certain line,
just type `|%|' and the corresponding |\cr|
will be ``commented out.'' ↑↑{percent} \ (This special mode doesn't
work with ↑|\+| lines, since |\+| is a macro whose argument is delimited
by the token `|\cr|', not simply by a token that has the same meaning
as~|\cr|. ↑↑{delimited arguments} But you can redefine |\+| to overcome
this hurdle, if you want to. For example, define a macro |\alternateplus|
that is just like |\+| except that its argument is delimited by the active
character |↑↑M|; then include the command `|\let\+=\alternateplus|' as
part of\/ |\obeylines|.)
\bugonpage 256, starting with line $-17$ (11/1/83)
\ninepoint
\textindent{6)} Finally, the ↑|\dosupereject| macro is designed to clear
out any insertions that have been held over, whether they are illustrations
or footnotes or both: ↑↑|\insertpenalties| ↑↑|\supereject|
\begintt
\ifnum\insertpenalties>0
\line{} \kern-\topskip \nobreak
\vfill\supereject\fi
\endtt
The mysterious negative ↑|\kern| here cancels out the natural space of the
↑|\topskip| glue that goes above the empty |\line|; that empty line box
prevents the ↑|\vfill| from disappearing into a page break. The vertical
list that results from |\dosupereject| is placed on \TeX's list of things
to put out next, just after the straggling insertions have been
reconsidered as explained in Chapter~15. Hence another super-eject will
occur, and the process will continue until no insertions remain.
\bugonpage 262, line 14 (2/12/84)
\ninepoint\indent
|\def\endindex{\mark{}\break\endgroup}|
\bugonpage 262, lines 34 and 35 (2/12/84)
\ninepoint\noindent
if\/ |\next| is `|\endindex|',
the next commands executed will be `|\vfill|\allowbreak
|\mark{}|\allowbreak|\break|\allowbreak|\endgroup|';
otherwise the line will be treated as a main entry.
\bugonpage 274, line 24 (2/15/84)
\ninepoint\indent
|\lineskip|\quad(interline glue if\/ |\baselineskip| isn't feasible)
\bugonpage 307, a slightly more explicit answer (11/3/83)
\ninepoint\noindent
\hbox to\parindent{\bf\hss6.3.\enspace}%
It represents the heavy bar that shows up in
your output. \ (This bar wouldn't be present if\/ ↑|\overfullrule| had been
set to |0pt|, nor is it present in an underfull box.)
\bugonpage 324, line 16 (2/15/84)
\ninepoint\noindent
\hbox to\parindent{\bf\hss18.41.\enspace}%
|$$\{\underbrace{\overbrace{\mathstrut a,\ldots,a}|
\bugonpage 333, beginning of the final paragraph (12/19/83)
\ninepoint
{\sl Note:\/} The stated preamble solves the problem and demonstrates
that \TeX's line-breaking capability can be used within tables. But this
particular table is not really a good example of the use of\/ |\halign|,
because \TeX\ could typeset it directly, using ↑|\everypar| in an
appropriate manner to set up the hanging indentation, and using |\par|
instead of\/ |\cr|. For example, one could say
\bugonpage 341, the bottom line was left out! (2/9/84)
\tenpoint\line{Footline\quad\dotfill\quad Page 1009}
\bugonpage 345, top three lines (1/26/84)
\ninepoint{\noindent\parfillskip=0pt
A mathcode is relevant only when the corresponding category code is
11 or~12; therefore many of these codes will rarely be looked at. For
example, the math code for |↑↑M| specifies the character |\oplus|,
but it's hard to imagine a user who would want |↑↑M|\par}
\bugonpage 359, starting with line 2 (11/16/83)
\ninepoint
\beginlines
|\mathchardef\ldotp="602E\mathchardef\cdotp="6201\mathchardef\colon="603A|
|\def\ldots{\mathinner{\ldotp\ldotp\ldotp}}|
|\def\cdots{\mathinner{\cdotp\cdotp\cdotp}}|
|\def\vdots{\vbox{\baselineskip=4pt \lineskiplimit=0pt|
| \kern6pt \hbox{.}\hbox{.}\hbox{.}}}|
|\def\ddots{\mathinner{\mskip1mu\raise7pt\vbox{\kern7pt\hbox{.}}\mskip2mu|
| \raise4pt\hbox{.}\mskip2mu\raise1pt\hbox{.}\mskip1mu}}|
\endlines
\bugonpage 359, starting with line 19 (11/3/83)
{\ninepoint\parindent=0pt
|\def|↑|\overbrace|%
|#1{\mathop{\vbox{\ialign{##\crcr\noalign{\kern3pt}|\parbreak%
| \downbracefill\crcr\noalign{\kern3pt\nointerlineskip}|\parbreak%
| $\hfil\displaystyle{#1}\hfil$\crcr}}}|↑|\limits||}|
|\def|↑|\underbrace||#1{\mathop{\vtop{\ialign{##\crcr|\parbreak%
| $\hfil\displaystyle{#1}\hfil$\crcr|%
|\noalign{\kern3pt\nointerlineskip}|\parbreak%
| \upbracefill\crcr\noalign{\kern3pt}}}}\limits}|
}
\bugonpage 364, starting with line 10 (11/1/83)
{\ninepoint\parindent=0pt
|\def\dosupereject{\ifnum\insertpenalties>0 % something is being held over|%
\parbreak
| \line{}\kern-\topskip\nobreak\vfill\supereject\fi}|
}
\bugonpage 379, line 1 (1/12/84)
\ninepoint\noindent
A particular item can be selected by its position number from the left:
\bugonpage 381, line 6 (2/12/84)
\ninepoint\indent
|\newcount\lineno % the number of file lines listed|
\bugonpage 381, lines 24 and 25 (12/15/83)
\ninepoint
{\parfillskip=0pt
Instead of listing a file verbatim, you might want to define a |\verbatim|
macro such that `|\verbatim{$this$|{\tt\ is }|{\it!}}|' yields
`|$this$|{\tt\ is }|{\it!}|'. It's somewhat\par}
\bugonpage 385, lines 22 and 23 (1/12/84)
\ninepoint\noindent
macro, a parameter, or a token list
variable; (b)~when \TeX\ must determine whether the token
|&|~or ↑|\span| ↑↑{ampersand}
or ↑|\cr| or~↑|\crcr| is the end of an entry within an ↑{alignment}.
\bugonpage 387, two paragraphs in right column (1/18/84)
\setbox0=\vbox{
\eightpoint
\tolerance=9999
\hbadness=2300
\finalhyphendemerits=3000000
\doublehyphendemerits=1000000
\parskip=1pt
\parindent=1.5em
\frenchspacing
\hsize=166.8125pt
\def\\#1{\raise.5pt\hbox{$\scriptscriptstyle
\ifx#1`\langle\!\langle\else\rangle\!\rangle\fi$}% Spanish quote marks
\ifx#1`\nobreak\hskip0pt \fi} % allow hyphenation
\item{A.} Exactamente. Pero los profesores son tan conservadores
que temer\'\i an espantar al tipo de estudiante \\`apisonadora\\'
que hace lo que le proponen para casa, obe\-dien\-te\-mente y de forma
mec\'anica. Adem\'as, no creo que les gustase el trabajo adicional
de calificar respuestas a preguntas abiertas.
\item{}La forma tradicional es dejar la parte creativa para los cursos
altos. Durante diecisiete a\~nos o m\'as se ense\~na al es\-tu\-diante a
aprobar, luego de golpe, cerca de la graduaci\'on, se le pide que haga
algo original.
}\rightline{\box0}
\bugonpage 395, lines 21 and 22 (1/12/84)
\ninepoint\noindent
{\parfillskip=0pt
Notice that the macros need to do their own checking for ligatures, and
they also take appropriate actions when a paragraph begins with an opening
quote. Since |\kern|\par}
\bugonpage 399, line 1 (1/10/84)
\ninepoint
{\parfillskip=0pt
Inside the output routine, |\box\footins| will now be a vbox of hboxes, and
\par}
\bugonpage 408, line 15 (12/14/83)
\noindent
| P. O. Box 1009, Haga Alto, CA 94321 USA}|
\smallskip\noindent\ninepoint
[Also change the ZIP code in the return address on the envelope
illustrated at the bottom of page 405.]
\bugonpage 409, line 5 (2/18/84)
\ninepoint\noindent
|\font\twelveit=cmti10 at 12pt % (a cheap substitute for cmti12)|
\bugonpage 422, lines 24--26 (2/9/84)
\ninepoint\noindent
(The last two lines use |\d@nger| and |\dd@nger|, which are non-|\outer|
equivalents of\/ |\danger| and |\ddanger|; such duplication is necessary
because control sequences of type ↑|\outer| cannot appear within a |\def|.)
\bugonpage 428, in the table of sixteen basic fonts (12/19/83)
\ninepoint\noindent
[The special fonts called |cmi10| and |cmi7| and |cmi5| should really be
called |cmmi10| and |cmmi7| and |cmmi5|.]
\bugonpage 445, line 6 (11/11/83)
\ninepoint
\line{if $(a-{1\over2}\theta)-
\bigl(h(z)-v\bigr)<\varphi$, increase~$v$ by the difference. Finally
construct a vbox of}
\bugonpage 449, line 12 (1/18/84)
\line{immediately clear why the `n' should
be attached to the `e' in one case but not}
\bugonpage 459, left column, line 2 (1/18/84)
\eightpoint
al-Khw\↑arizm\↑\i, abu Ja`far Mu\d{h}ammad
\bugonpage 462, index entry for {\tt\char`\\colon} (11/16/83)
\ninepoint Add page \underbar{359} to this list.
\bugonpage 464, index entry for {\tt\char`\\dump} (1/10/84)
\ninepoint Add page {\it 344\/} to this list.
\bugonpage 464, right column, line 5 (1/5/84)
\eightpoint
Dvo\v r\'ak, Anton\'\i n Leopold, 409.
\bugonpage 469, index entry for {\tt\char`\\kern} (11/1/83)
\ninepoint Add page {\it 256\/} to this list.
\bugonpage 470, index entry for {\tt\char`\\limits} (11/3/83)
\ninepoint Add page {\it 359\/} to this list.
\bugonpage 472, right column, line 28 (1/3/84)
\eightpoint\indent
\hbox to0pt{\hss\lower1pt\hbox{*}}|\nullfont|, 14, 153, 271, 433.
\bugonpage 480, index entry for {\tt\char`\\vbox} (11/1/83)
\ninepoint Delete page 256 from this list.
\bye